dbschema 实用程序
dbschema 实用程序显示复制数据库对象所需的 SQL 语句(模式)。
在获取数据库的模式之后,您可以将 dbschema 输出重定向到通过 DB-Access 使用的文件。
所有可更新的辅助服务器上都支持 dbschema 实用程序。
只读辅助服务器上也支持 dbschema 实用程序。但是,dbschema 实用程序在这些服务器上运行时,会显示一条警告消息。
使用 dbschema 实用程序可能会增加数据库中的序列对象,而在生成的数字中生成间隔,这在需要序列化整数的应用程序中可能不希望出现。
支持Oracle模式之后 dbschema 实用程序增加-o参数,-o 对象名(例如:-o pkg1)导出指定数据库对象,-o all导出ORACLE模式下创建的所有包、存储过程、函数等数据库对象,导出内容格式中不再包括owner.object。导入时使用方法与目前用法保持一致。
Oracle模式下创建的表、视图、触发器等数据库对象相应导出内容格式以Oracle为准,不再包括 owner.object。GBase模式下创建的数据库对象依旧包含 owner.object。导出语法为原生或Oracle兼容取决于创建对象时所在模式,并且将导出对应 set environment sqlmode 模式设置语句。
dbschema 输出中的对象模式和冲突检测
dbschema 实用程序的输出显示对象模式并支持冲突检测。
dbschema 输出显示:
- 非空约束的名称。
- 可使用该实用程序的输出作为输入来创建另一数据库。如果在两个数据库中没有对非空约束使用相同名称,那么可能导致问题。
- 处在禁用状态的对象的对象模式。这些对象可以是约束、触发器或索引。
- 处在过滤状态的对象的对象模式。这些对象可以是约束或唯一索引。
- 与基表关联的违反表和诊断表。
有关对象模式和冲突检测的更多信息,请参阅《GBase 8s SQL 指南:语法》中的 SET、START VIOLATIONS TABLE 和 STOP VIOLATIONS TABLE 语句。
使用 dbschema 实用程序的准则
可将定界标识用于 dbschema 实用程序。dbschema 实用程序检测诸如关键字、混合大小写或具有特殊字符的数据库对象,并将这些数据库对象括在双引号中。
dbschema 命令的语法
dbschema 命令显示了复制指定数据库对象所需的 SQL 语句。该命令还显示 UPDATE STATISTICS 语句创建的分发。
UDT选项
元素 | 用途 | 更多信息 |
---|---|---|
all | 指示 dbschema 包含数据库中的所有表或序列对象,或所有用户定义的数据类型 | 无。 |
-c file_name | 生成用于复制存储空间、块、物理日志和逻辑日志的命令。 | 如果使用 -c 元素而不使用 -ns 元素,数据库服务器会生成 SQL 管理 API 命令。 如果同时使用 -c 元素和 -ns 元素,数据库服务器会生成 onspaces 或 onparams 命令。 |
-d database | 指定dbschema应用于的数据库。数据库可在远程数据库服务器上。 | 参考: 如果希望限定数据库的名称,请参阅《GBase 8s SQL 指南:语法》的“数据库名称”主题。 |
filename | 指定包含 dbschema 输出的文件的名称 | 如果省略文件名,dbschema 会将输出发送到屏幕。如果指定文件名,dbschema 将创建名为 filename 的文件来包含 dbschema 输出。 |
-hd | 将分发显示为数据值 | 如果对表名指定了 ALL 关键字,那么将显示数据库中所有表的分发。 |
-it | 设置在 dbschema 查询目录表时用于 dbschema 的隔离类型。隔离类型为: ● DR = 脏读 ● CR = 提交读 ● CS = 游标稳定性 ● CRU = 具有 RETAIN® UPDATE LOCKS 的已提交读 ● CSU = 具有 RETAIN UPDATE LOCKS 的游标稳定性 ● DRU = 具有 RETAIN UPDATE LOCKS 的脏读 ● LC = 最后提交读 ● RR = 可重复读 | 此选项不会显示其他任何信息。 |
-l | 将锁定方式设置为在 dbschema 查询目录表时等待 dbschema 的秒数。 | 此选项不会显示其他任何信息。 |
-ns | 生成用于复制存储空间、块、物理日志和逻辑日志的 onspaces 或 onparams 实用程序命令。 | 在命令中,-c 元素必须放在 -ns 元素之前。 |
-nw | 生成用于在未指定所有者的情况下创建对象的 SQL。 | -nw 元素也是 dbexport 命令选项。 |
-q | 禁止头中的数据库版本。 | 此可选元素放在其他元素之前。 |
-r | 生成有关角色创建的信息。 | 有关详细信息,请参阅角色创建。 |
-seqsequence | 生成 DDL 语句来定义指定的序列对象 | |
-ss | 生成特定于服务器的信息 | 如果没有生成表模式,那么将忽略此选项。 |
-si | 为非分段表排除索引存储子句的生成 | 此选项只有和 -ss 选项一起使用时才可用。 |
-sl length | 指定未格式化的 CREATE TABLE 和 ALTER TABLE 语句的最大长度(以字节为单位)。 | |
-u | 打印函数、强制转型和用户定义的数据类型的定义 | 指定 -u all 以包含分发列表中的所有表。 |
-ua | 打印用户定义的数据类型(包括对某个数据类型定义的所有函数和类型)的定义。 | |
-ui | 打印用户定义的数据类型的定义(包括类型继承) | |
-V | 显示软件版本号和序列号 | |
-version | 扩展 -V 选项以显示有关构建版本、主机、操作系统、构建号和构建日期以及 GLS 版本的其他信息。 | |
-w password | 指定数据库密码(如果有)。 |
您必须是 DBA 或对数据库具有 Connect 或 Resource 特权,才能对数据库运行 dbschema。
示例
以下命令将生成具有 customer 数据库中所有表或序列对象的模式,但不指定所有者:
dbschema –d customer all -nw
数据库模式创建
您可创建整个数据库的模式或数据库的一部分的模式。
使用 dbschema 实用程序选项可执行以下操作:
- 对于特定的表或整个数据库,按所有者显示 CREATE SYNONYM 语句。
- 对于特定的表或整个数据库,显示 CREATE TABLE、CREATE VIEW、CREATE FUNCTION 或 CREATE PROCEDURE 语句。
- 对于数据库或特定表,显示影响指定用户或影响所有用户的所有 GRANT 特权语句。用户可以是用户名或角色名。
- 显示用户定义的数据类型和行数据类型(带或不带类型继承)。
- 显示定义指定序列 对象或定义数据库中所有序列对象的 CREATE SEQUENCE 语句。
使用 dbschema 且只指定了数据库名称时,等同于使用带所有选项(除了 -hd 和 -ss 选项)的 dbschema。另外,如果为数据库创建了“信息模式”视图,那么将显示此模式。例如:以下两个命令是等价的:
dbschema -d stores_demo
dbschema -s all -p all -t all -f all -d stores_demo
dbschema 所显示的 CREATE TABLE 语句包含的 SERIAL 字段不指定起始值。使用模式文件创建的新 SERIAL 字段具有起始值 1 ,不论原始数据库中它们的起始值是多少都是如此。如果起始值不可接受,那么必须修改模式文件。
在 UNIX 或 Linux 网络中创建数据库的模式
dbschema -d 选项用于在 UNIX™ 或 Linux™ 网络上创建并显示数据库的模式。
可以在任何可访问的非 SE GBase 8s 数据库服务器上指定数据库。
以下命令显示了 stores_demo 数据库的模式,该数据库在 UNIX 或 Linux 系统控制台上的 finland 数据库服务器上:
dbschema -d //finland/stores_demo
更改对象所有者
您可以编辑 dbschema 输出以更改新对象的所有者。
当 dbschema 实用程序生成任何 CREATE TABLE、CREATE INDEX、CREATE SYNONYM、CREATE VIEW、CREATE SEQUENCE、CREATE PROCEDURE、CREATE FUNCTION 或 GRANT 语句并重新生成任何唯一、引用或检查约束时,它使用 owner.object 约定。结果,如果您使用 dbschema 输出来创建新对象(表、索引、视图、过程、约束、序列或同义词),原对象的所有者将拥有新对象。如果希望更改新对象的所有者,那么在将 dbschema 输出作为 SQL 脚本运行前,必须修改它。
如果还指定了存储编译时警告的文件的路径名,那么可使用 dbschema 的输出来创建新的函数。此路径名将显示在 dbschema 输出中。
有关 CREATE TABLE、CREATE INDEX、CREATE SYNONYM、CREATE VIEW、CREATE SEQUENCE、CREATE PROCEDURE、CREATE FUNCTION 和 GRANT 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。
dbschema 特定于服务器的信息
dbschema -ss 选项生成特定于服务器的信息。在除 SE 以外的所有 GBase 8s 数据库服务器中,-ss 选项总是生成锁定方式、扩展数据块大小以及数据库空间名称(如果数据库空间名称与数据库的数据库空间不同)。另外,如果表被分段,那么 -ss 选项将显示有关分段存储策略的信息。
指定 dbschema -ss 选项时,输出还会显示为特定用户或在整个模式中发出的所有 GRANT FRAGMENT 语句。
只有和 -ss 选项一起使用时才可用的 -si 选项为非分段表排除索引存储子句的生成。
如果数据库空间包含多重分区,将在输出中显示数据库空间分区名称。
有关分段级权限的信息,请参阅《GBase 8s SQL 指南:语法》中的 GRANT FRAGMENT 和 REVOKE FRAGMENT 语句。
用户定义的数据类型和复杂数据类型
dbschema -u 选项将显示数据库包含的任何用户定义数据类型和复杂数据类型的定义。子选项 i 将类型继承添加到 dbschema -u 选项显示的信息中。
以下命令显示 stork 数据库的所有用户定义数据类型和复杂数据类型:
dbschema -d stork -u all
使用指定选项 -u all 运行的 dbschema 的输出可能如以下示例所示:
create row type 'gbasedbt'.person_t
(
name varchar(30, 10) not null,
address varchar(20, 10),
city varchar(20, 10),
state char(2),
zip integer,
bdate date
);
create row type 'gbasedbt'.employee_t
(
salary integer,
manager varchar(30, 10)
) under person_t;
以下命令显示了 stork 数据库中 person_t 表的用户定义数据类型和复杂数据类型以及它们的类型继承:
dbschema -d stork -ui person_t
使用选项 -ui person_t 运行的 dbschema 的输出可能如以下示例所示:
create row type 'gbasedbt'.person_t
(
name varchar(30, 10) not null,
address varchar(20, 10),
city varchar(20, 10),
state char(2),
zip integer,
bdate date
);
create row type 'gbasedbt'.employee_t
(
salary integer,
manager varchar(30, 10)
) under person_t;
create row type 'gbasedbt'.sales_rep_t
(
rep_num integer,
region_num integer,
commission decimal(16),
home_office boolean
) under employee_t;
序列创建
dbschema -seq sequence 命令会生成有关序列创建的信息。
元素 | 用途 | 重要注意事项 |
---|---|---|
-seq sequence | 显示定义 sequence 的 CREATE SEQUENCE 语句 | 无。 |
-seq all | 显示数据库的所有 CREATE SEQUENCE 语句 | 无。 |
使用选项 -seq sequitur 运行 dbschema 可能产生下面的输出:
CREATE SEQUENCE sequitur INCREMENT 10 START 100 NOCACHE CYCLE
有关 CREATE SEQUENCE 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。
同义词创建
dbschema -s 命令会生成有关同义词创建的信息。
以下语法图分段显示同义词的创建。
元素 | 用途 | 重要注意事项 |
---|---|---|
-s ownername | 显示 ownername 拥有的 CREATE SYNONYM 语句 | 无。 |
-s all | 显示指定数据库、表或视图的所有 CREATE SYNONYM 语句 | 无。 |
使用指定选项 -s alice 运行的 dbschema 的输出可能如以下示例所示:
CREATE SYNONYM 'alice'.cust FOR 'alice'.customer
有关 CREATE SYNONYM 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。
表、视图或过程创建
几个 dbschema 选项可以生成有关创建表、视图和过程的信息。
以下语法图显示表、视图和过程的创建。
元素 | 用途 | 重要注意事项 |
---|---|---|
-f all | 将 SQL 语句的输出仅限于复制所有函数和过程的那些语句 | 无。 |
-f function | 将 SQL 语句的输出仅限于复制指定函数的那些语句 | 无。 |
-f procedure | 将 SQL 语句的输出仅限于复制指定过程的那些语句 | 无。 |
-ff all | 将 SQL 语句的输出仅限于复制所有函数的那些语句 | 无。 |
-fp all | 将 SQL 语句的输出仅限于复制所有过程的那些语句 | 无。 |
-t table | 将 SQL 语句的输出仅限于复制指定表的那些语句 | 无。 |
-t view | 将 SQL 语句的输出仅限于复制指定视图的那些语句 | 无。 |
-t all | 在 SQL 语句的输出中包含复制所有表和视图的所有语句 | 无。 |
有关 CREATE PROCEDURE 语句和 CREATE FUNCTION 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。
表信息
dbschema -ss 命令会检索有关分段表、锁定方式以及扩展数据块大小的信息。
以下 dbschema 输出显示了为分段表指定的表达式。
{ TABLE “sallyc”.t1 row size = 8 number of columns = 1 index size = 0 }
create table “sallyc”.t1
(
c1 integer
) fragment by expression
(c1 < 100 ) in db1 ,
((c1 >= 100 ) AND (c1 < 200 ) ) in db2 ,
remainder in db4
extent size 16 next size 16 lock mode page;
revoke all on “sallyc”.t1 from “public”;
以下 dbschema 输出显示有关分区分段表中的分区的信息。
DBSCHEMA Schema Utility grant dba to "sqlqa";
{ TABLE "sqlqa".t1 row size = 24 number of columns = 2 index size = 13 }
create table "sqlqa".t1
(
c1 integer,
c2 char(20)
)
fragment by expression
partition part_1 (c1 = 10 ) in dbs1 ,
partition part_2 (c1 = 20 ) in dbs1 ,
partition part_3 (c1 = 30 ) in dbs1 ,
partition part_4 (c1 = 40 ) in dbs1 ,
partition part_5 (c1 = 50 ) in dbs1
extent size 16 next size 16 lock mode page;
存储空间、块和日志创建
dbschema -c 命令会生成 SQL 管理 API 命令,用于复制存储空间、块、逻辑日志和物理日志。如果使用 dbschema -c -ns 命令,数据库服务器会生成 onspaces 或 onparams 实用程序命令,用于复制存储空间、块、物理日志和逻辑日志。
例如:
-
运行以下命令可生成名为 dbschema1.out 的文件,其中包含用于以 SQL 管理 API 格式复制存储空间、块、物理日志和逻辑日志的命令:
dbschema -c dbschema1.out
-
运行以下命令可生成名为 dbschema2.out 的文件,其中包含用于以 onspaces 和 onparams 实用程序格式复制存储空间、块、物理日志和逻辑日志的命令:
dbschema -c -ns dbschema2.out
(可选)运行命令时,先指定 -q,再指定 -c 或 -c -ns,以禁止显示数据库版本。例如,指定:
dbschema -q -c -ns dbschema3.out
创建存储空间、块和日志的样本输出
dbschema -c 或 dbschema -c -ns 命令的输出包含所有 SQL 管理 API 或 onspaces 和 onparams 实用程序命令,可用于复制存储空间、块和日志。
SQL 管理 API 格式的输出示例
# Dbspace 1 -- Chunk 1
EXECUTE FUNCTION TASK ('create dbspace', 'rootdbs',
'/export/home/gbasedbt/data/rootdbs1150fc4', '200000',
'0', '2', '500', '100')
# Dbspace 2 -- Chunk 2
EXECUTE FUNCTION TASK ('create dbspace', 'datadbs1',
'/export/home/gbasedbt/data/datadbs1150fc4', '5000000',
'0', '2', '100', '100')
# Dbspace 3 -- Chunk 3
EXECUTE FUNCTION TASK ('create dbspace', 'datadbs2',
'/export/home/gbasedbt/data/datadbs2150fc4', '5000000',
'0', '2', '100', '100')
# Dbspace 4 -- Chunk 4
EXECUTE FUNCTION TASK ('create dbspace', 'datadbs3',
'/export/home/gbasedbt/data/datadbs3_1150fc4', '80000',
'16', '8', '400', '400')
EXECUTE FUNCTION TASK ('start mirror', 'datadbs3',
'/export/home/gbasedbt/data/datadbs3_1150fc4', '80000',
'16', '/export/home/gbasedbt/data/mdatadbs3_1150fc4', '16')
# Dbspace 5 -- Chunk 5
EXECUTE FUNCTION TASK ('create tempdbspace', 'tempdbs',
'/export/home/gbasedbt/data/tempdbs_1150fc4', '1000',
'0', '2', '100', '100')
# Dbspace 6 -- Chunk 6
EXECUTE FUNCTION TASK ('create sbspace', 'sbspace',
'/export/home/gbasedbt/data/sbspace_1150fc4',
'1000', '0')
# Dbspace 6 -- Chunk 7
EXECUTE FUNCTION TASK ('add chunk', 'sbspace',
'/export/home/gbasedbt/data/sbspace_1_1150fc4',
'1000', '0')
# Dbspace 7 -- Chunk 8
EXECUTE FUNCTION TASK ('create blobspace', 'blobdbs',
'/export/home/gbasedbt/data/blobdbs_1150fc4',
'1000', '0', '4')
# External Space 1
EXECUTE FUNCTION TASK ('create extspace', 'extspace',
'/export/home/gbasedbt/data/extspac_1150fc4')
# Physical Log
EXECUTE FUNCTION TASK ('alter plog', 'rootdbs', '60000')
# Logical Log 1
EXECUTE FUNCTION TASK ('add log', 'rootdbs', '10000')
onspaces 和 onparams 实用程序格式的输出示例
# Dbspace 1 -- Chunk 1
onspaces -c -d rootdbs -k 2 -p
/export/home/gbasedbt/data/rootdbs1150fc4
-o 0 -s 200000 -en 500 -ef 100
# Dbspace 2 -- Chunk 2
onspaces -c -d datadbs1 -k 2 -p
/export/home/gbasedbt/data/datadbs1150fc4
-o 0 -s 5000000 -en 100 -ef 100
# Dbspace 3 -- Chunk 3
onspaces -c -d datadbs2 -k 2 -p
/export/home/gbasedbt/data/datadbs2150fc4
-o 0 -s 5000000 -en 100 -ef 100
Dbspace 4 -- Chunk 4
onspaces -c -d datadbs3 -k 8
-p /export/home/gbasedbt/data/datadbs3_1150fc4
-o 16 -s 80000 -en 400 -ef 400
-m /export/home/gbasedbt/data/mdatadbs3_1150fc4 16
# Dbspace 5 -- Chunk 5
onspaces -c -d tempdbs -k 2 -t -p
/export/home/gbasedbt/data/tempdbs_1150fc4 -o 0 -s 1000
# Dbspace 6 -- Chunk 6
onspaces -c -S sbspace -p
/export/home/gbasedbt/data/sbspace_1150fc4
-o 0 -s 1000 -Ms 500
# Dbspace 7 -- Chunk 7
onspaces -c -b blobdbs -g 4 -p
/export/home/gbasedbt/data/blobdbs_1150fc4 -o 0 -s 1000
# External Space 1
onspaces -c -x extspace -l
/export/home/gbasedbt/data/extspac_1150fc4
# Logical Log 1
onparams -a -d rootdbs -s 10000
角色创建
dbschema -ss 命令会生成有关角色创建的信息。
以下语法图显示角色的创建。
元素 | 用途 | 重要注意事项 |
---|---|---|
-r role | 显示复制和授权指定角色所需的 CREATE ROLE 和 GRANT 语句。 | 不能使用 -r 选项指定用户或角色的列表。您可指定一个角色或所有角色。SE 不支持 -r 选项。 |
-r all | 显示复制和授权所有角色所需的所有 CREATE ROLE 和 GRANT 语句。 | 无 |
以下 dbschema 命令输出显示创建了角色 calen 并被授予 cathl、judith 和 sallyc:
dbschema -r calen -d stores_demo
DBSCHEMA Schema 实用程序
软件序列号 RDS#N000000
create role calen;
grant calen to cathl with grant option;
grant calen to judith ;
grant calen to sallyc ;
特权
dbschema -p 命令会生成有关特权的信息。
以下语法图分段显示特权信息。
元素 | 用途 | 重要注意事项 |
---|---|---|
-p user | 显示授予特权给 user 的 GRANT 语句,其中 user 是用户名或角色名。只指定一个用户或角色。 | 不能使用 -p 选项指定特定的用户列表。可指定一个用户或角色或指定所有用户或角色。 |
-p all | 显示指定数据库、表或视图的所有用户或指定表的所有角色的 GRANT 语句。 | 无。 |
输出还显示对指定用户或角色或整个模式(使用 all 选项时)发出的所有 GRANT FRAGMENT 语句。
授予特权
您可以生成有关 GRANT 语句授权者的 dbschema 信息。
在 dbschema 输出中,AS 关键字指示 GRANT 语句的授权者。以下示例输出指示 norma 发出了 GRANT 语句:
GRANT ALL ON 'tom'.customer TO 'claire' AS 'norma'
当 dbschema 输出中出现 GRANT 和 AS 关键字时,您可能需要授予特权,才能将 dbschema 输出作为 SQL 脚本运行。根据前面的示例输出行,以下条件必须为真,您才能将该语句作为脚本的一部分运行:
- 用户 norma 必须具有到数据库的 Connect 特权。
- 用户 norma 必须具有表 tom.customer 的所有特权 WITH GRANT OPTION。
有关 GRANT、GRANT FRAGMENT 和 REVOKE FRAGMENT 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。
显示角色的特权信息
您可以生成有关为特定角色所授予的特权的 dbschema 信息。
角色是在授权给该角色的数据库对象上的拥有特权的分类。DBA 可对某个角色指定相关工作任务的特权(例如工程师),然后将该角色授权给用户,而不是将相同的特权集授予每个用户。创建角色后,DBA 就可使用 GRANT 语句将角色授权给用户或授权给其他角色。
例如,使用以下 dbschema 命令显示授予给 calen 角色的特权。
dbschema -p calen -d stores_demo
dbschema 实用程序显示的信息的示例为:
grant alter on table1 to 'calen'
dbschema 输出中表的分发信息
带有表名的 dbschema -hd 命令会检索为数据库表存储的分发信息。如果对表名指定了 ALL 关键字,那么将显示数据库中所有表的分发。
在 dbimport 操作执行过程中会为非不透明列中的主要索引自动创建分发信息。以 MEDIUM 或 HIGH 方式运行 UPDATE STATISTICS 语句,以创建有关包含以下索引类型的表的分发信息:
- Virtual Index Interface (VII) 或功能索引
- 用户定义数据类型的列上的索引
- 内置的不透明数据类型的列上的索引(例如 BOOLEAN 或 LVARCHAR)
当 UPDATE STATISTICS 以 MEDIUM 或 HIGH 方式对表运行时,如果您使用了 SAMPLING SIZE 关键字,那么 dbschema 实用程序的输出将显示分发信息。
有关 UPDATE STATISTICS 语句的信息,请参阅《GBase 8s SQL 指南:语法》。
分发的 dbschema 的输出在以下部分中提供:
- 分发描述
- 分发信息
- 溢出信息
dbschema 输出的各部分将在以下各节解释。作为示例,讨论使用以下名为 invoices 的虚构表的分发。此表包含 165 行(包括重复的行)。
您可使用与以下示例类似的方法调用 dbschema 生成本讨论的输出:
dbschema -hd invoices -d pubs_stores_demo
显示分发信息的 dbschema 输出示例
dbschema 输出可以显示已为指定表创建的数据分发,以及生成分发的 UPDATE STATISTICS 语句运行的日期。
以下 dbschema 输出的示例显示分发信息。
cathl.invoices.invoice_num 的分发
High 方式,10.000000 分辨率
--- DISTRIBUTION ---
( 5)
1: ( 16, 7, 11)
2: ( 16, 6, 17)
3: ( 16, 8, 25)
4: ( 16, 8, 38)
5: ( 16, 7, 52)
6: ( 16, 8, 73)
7: ( 16, 12, 95)
8: ( 16, 12, 139)
9: ( 16, 11, 182)
10: ( 10, 5, 200)
--- OVERFLOW ---
1: ( 5, 56)
2: ( 6, 63)
示例中分发信息的描述
dbschema 输出示例的第一部分描述了已为指定表创建了何种数据分发。以下示例中指出了表的名称:
cathl.invoices.invoice_num 的分发
输出是针对 invoices 表的,该表由用户 cathl 所有。本数据分发描述了列 invoice_num。如果表具有构建在多个列上的分发,dbschema 将单独地列出每个列的分发。
dbschema 输出还显示运行 UPDATE STATISTICS 语句(用于生成分发)的日期。您可使用此日期得知您的分发已过时多久。
输出的描述部分的最后一行描述了创建分发的方式(MEDIUM 或 HIGH)以及分辨率。如果使用 Medium 方式创建分发,还将列出样本的可信度。例如:如果使用 HIGH 方式、分辨率 10 运行 UPDATE STATISTICS 语句,最后一行将如以下示例所示:
High 方式,10.000000 分辨率
dbschema 输出中的分发信息
dbschema 输出中的分发信息描述了为分发创建的二进制文件,表中和每个二进制文件中的值的范围以及每个二进制文件中的不同值的数量。
请考虑以下示例:
( 5)
1: ( 16, 7, 11)
2: ( 16, 6, 17)
3: ( 16, 8, 25)
4: ( 16, 8, 38)
5: ( 16, 7, 52)
6: ( 16, 8, 73)
7: ( 16, 12, 95)
8: ( 16, 12, 139)
9: ( 16, 11, 182)
10: ( 10, 5, 200)
最右边列中的第一个值是此列中的最小值。在本示例中,它是 5 。
左边的列显示了二进制文件号,在本示例中是 1 到 10。括号中的第一个数字显示了二进制文件中有多少值。对于该表,是总行数 (165) 的 10%,四舍五入为 16。所有二进制文件(除了最后一个二进制文件)的第一个数字都相同。最后一行可能具有较小的值,指示它不具有一样多的行值。在本示例中,所有二进制文件(除了最后一个二进制文件)都包含 16 行,最后一个二进制文件包含 10 行。
括号中的中间列指示此二进制文件中包含多少不同的值。因此,如果 16 个值的二进制文件中有 11 个不同的值,它暗示这些值中的一个或多个至少重复了一次。
括号中的右边列是二进制文件中的最大值。最后一个二进制文件中的最大值也是表中的最大值。对于本示例,最后一个二进制文件中的最大值为 200 。
dbschema 输出中的溢出信息
dbschema 输出的最后部分显示了具有许多重复的值。
所指示的值的重复次数必须大于一个临界量,该临界量大约分辨率的 25% 乘以行数。如果留在一般分发数据中,重复使分发倾斜,所以将它们从分发移到一个单独的列表中,如以下示例所示:
--- OVERFLOW ---
1: ( 5, 56)
2: ( 6, 63)
对于本示例,临界量是 0.25 * 0.10 * 165 即 4.125。因此,任何重复 5 次或更多次的值都将列在溢出部分。此分发中的两个值在表中重复了 5 次或更多次:值 56 重复了 5 次,而值 63 重复了 6 次。
使用 dbschema 输出作为 DB-Access 输入
您可使用 dbschema 实用程序来获取数据库的模式并将 dbschema 输出重定向到文件。稍候,您可以将文件导入 DB-Access,并使用 DB-Access 在新数据库中重新创建模式。
将表插入到 dbschema 输出文件
您可以将 CREATE TABLE 语句插入 dbschema 输出文件,并将此输出用作 DB-Access 输入。
以下示例将 customer 表的 CREATE TABLE 语句复制到 dbschema 输出文件 tab.sql 中:
dbschema -d db -t customer > tab.sql
从输出文件 tab.sql 除去有关 dbschema 的头信息,然后使用 DB-Access 在另一个数据库中重新创建表,如下所示:
dbaccess db1 tab.sql
重新创建数据库
您可使用 dbschema 和 DB-Access 从数据库保存模式,然后在另一数据库中重新创建该模式。dbschema 输出文件可包含创建整个数据库的语句。
保存数据库模式并重新创建数据库:
-
使用 dbschema 将模式保存到输出文件(例如 db.sql):
dbschema -d db > db.sql
还可使用 -ss 选项生成特定于服务器的信息:
dbschema -d db -ss > db.sql
-
从输出文件除去有关 dbschema 的头信息(如果有的话)。
-
在输出文件的开头添加 CREATE DATABASE 语句或使用 DB-Access 来创建新数据库。
-
使用 DB-Access 在新数据库中重新创建模式:
dbaccess - db.sql
使用 db.sql 在不同的数据库服务器上创建数据库时,请确认数据库空间存在。
数据库 db 和 testdb 名称不同但具有相同的模式。